#include "Protocol.hpp"
#include "TpcServer.hpp"
#include <iostream>
#include <memory>
#include "ServerCal.hpp"
#include <unistd.h>




void Usage(char* proc)
{
  std::cout << "Usage:" << proc << "port[1024+]" << std::endl;
}

int main(int argc, char* argv[])
{
  if (argc != 2)
  {
    Usage(argv[0]);
    exit(0);
  }
  ServerCal cal;

  uint16_t port = std::stoi(argv[1]);
  unique_ptr<TcpServer> tcpsvr(new TcpServer(port, std::bind(&ServerCal::Calculatored, &cal, std::placeholders::_1)));

  tcpsvr->InitServer();
  daemon(0, 0);
  tcpsvr->Start();


// Respond
// std::string str;
// Respond resp(1000, 0);
// // 序列化
// resp.Serialization(&str);
// std::cout << str << std::endl;
// // 加报头
// std::string package = Encode(str);
// std::cout << package << std::endl;

// // 去报头
// std::string content;
// Decode(package, &content);
// std::cout << content << std::endl;
// // 反序列化
// Respond tmp;
// tmp.Deserialization(content);
// std::cout << tmp._result << " " << tmp._code << std::endl;




// Request
// std::string str;
// Request req(1, 1, '+');
// // 序列化
// req.Serialization(&str);
// std::cout << str << std::endl;
// // 加报头
// std::string package = Encode(str);
// std::cout << package << std::endl;

// // 去包头
// std::string content;
// Decode(package, &content);
// // 反序列化
// Request temp;
// temp.Deserialization(content);
// std::cout << temp._x << temp._op << temp._y << std::endl;
  return 0;
}